From 4c02c7d591a53dec58ad138dc795908aaa681a9d Mon Sep 17 00:00:00 2001 From: ferrog Date: Thu, 20 Nov 2025 13:17:59 +0000 Subject: [PATCH] Tested and working... NI libraries were missin --- EC-GN-JA-PCF-IN/pom.xml | 5 +- .../JAESDNTimeCompareGAM.cpp | 132 + .../JAESDNTimeCompareGAM.h | 101 + .../GAMs/JAESDNTimeCompareGAM/Makefile.gcc | 27 + .../GAMs/JAESDNTimeCompareGAM/Makefile.inc | 55 + .../JAModeControlGAM/JAModeControlGAM.cpp | 2 +- .../JASDNRTStateMachineGAM.cpp | 147 +- .../JASDNRTStateMachineGAM.h | 46 +- .../src/main/c++/GAMs/Makefile.inc | 3 +- .../Configurations/JAGyro_Test.cfg | 5214 +++++++++++++++++ .../Configurations/JAGyrotronA_FY19_P1.cfg | 293 +- .../Configurations/JAGyrotronB_FY19_P1.cfg | 238 +- .../JAESDNTimeCompareGAM.cpp | 132 + .../JAESDNTimeCompareGAM.h | 101 + .../GAMs/JAESDNTimeCompareGAM/Makefile.gcc | 27 + .../GAMs/JAESDNTimeCompareGAM/Makefile.inc | 55 + .../JAModeControlGAM/JAModeControlGAM.cpp | 2 +- .../JARTStateMachineGAM-v1.cpp | 411 -- .../JARTStateMachineGAM-v1.h | 262 - .../JARTStateMachineGAM_stable.cpp | 402 -- .../JARTStateMachineGAM_stable.h | 260 - .../JASDNRTStateMachineGAM.cpp | 147 +- .../JASDNRTStateMachineGAM.h | 46 +- .../GAMs/Makefile.inc | 3 +- .../Startup/Main.sh | 1 + .../Startup/runECPCSub.sh | 0 .../Startup/runEPICSTEST.sh | 0 .../Startup/runHWTEST.sh | 0 .../Startup/runMain.sh | 0 .../Startup/runMainB.sh | 0 .../Startup/runNI6528TEST.sh | 0 .../Startup/runTest.sh | 4 + .../Test_P01/test.py | 5 +- .../Test_P01/test_async.py | 42 +- .../Test_P01/test_async.pyc | Bin 18679 -> 20426 bytes .../Test_P01/test_ready.pyc | Bin 2241 -> 2241 bytes .../Test_P01/test_ready_hw.pyc | Bin 1379 -> 1379 bytes .../Test_P01/test_setup.pyc | Bin 6040 -> 6040 bytes .../Test_P01/test_setup_hw.pyc | Bin 2912 -> 2912 bytes .../Test_P01/test_standby.pyc | Bin 4531 -> 4531 bytes .../Test_P01/test_standby_hw.pyc | Bin 3293 -> 3293 bytes .../Test_P01/test_sync.pyc | Bin 5308 -> 5308 bytes ec-gn-ja-pcf-sdd-in | 2 +- generate.sh | 11 +- ...atch => EC-GN-P01-PCF0CORE_dbToLoad.patch} | 0 ...EC-GN-P01-PCF0CORE_sddPreDriverConf.patch} | 3 +- ...C-GN-P01-PCF0CORE_userPreDriverConf.patch} | 3 +- 47 files changed, 6672 insertions(+), 1510 deletions(-) create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/Makefile.inc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyro_Test.cfg create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/Makefile.gcc create mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/Makefile.inc delete mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp delete mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h delete mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp delete mode 100644 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/Main.sh mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runECPCSub.sh mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runEPICSTEST.sh mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runHWTEST.sh mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMain.sh mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runMainB.sh mode change 100644 => 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runNI6528TEST.sh create mode 100755 EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runTest.sh rename patches/{EC-GN-PCF0CORE_dbToLoad.patch => EC-GN-P01-PCF0CORE_dbToLoad.patch} (100%) rename patches/{EC-GN-PCF0CORE_sddPreDriverConf.patch => EC-GN-P01-PCF0CORE_sddPreDriverConf.patch} (98%) rename patches/{EC-GN-PCF0CORE_userPreDriverConf.patch => EC-GN-P01-PCF0CORE_userPreDriverConf.patch} (97%) diff --git a/EC-GN-JA-PCF-IN/pom.xml b/EC-GN-JA-PCF-IN/pom.xml index ce919e0..3218938 100755 --- a/EC-GN-JA-PCF-IN/pom.xml +++ b/EC-GN-JA-PCF-IN/pom.xml @@ -39,7 +39,7 @@ of the distribution package.. org.iter.codac.units maven-iter-settings - 6.3.0 + 6.1.0 @@ -103,6 +103,9 @@ of the distribution package.. *.so + + *.so + *.so diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp new file mode 100644 index 0000000..2986976 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp @@ -0,0 +1,132 @@ +/** + * @file JAESDNTimeCompareGAM.cpp + * @brief Source file for class JAESDNTimeCompareGAM + * @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 JAESDNTimeCompareGAM (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 "JAESDNTimeCompareGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAESDNTimeCompareGAM::JAESDNTimeCompareGAM() { + //ESDNTime holder + esdntime_previous = 0; + + //Input signals. + esdntime = NULL_PTR(MARTe::uint32 *); + + //Output signals. + sdn_connection = NULL_PTR(MARTe::uint32 *); + +} + +JAESDNTimeCompareGAM::~JAESDNTimeCompareGAM() { + if (esdntime != NULL_PTR(MARTe::uint32 *)) { + delete[] esdntime; + } + if (sdn_connection != NULL_PTR(MARTe::uint32 *)) { + delete[] sdn_connection; + } +} + +bool JAESDNTimeCompareGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAESDNTimeCompareGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +bool JAESDNTimeCompareGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + // Do type check for input signals. + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of expected values."); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + 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); + 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) { + esdntime = reinterpret_cast(GetInputSignalMemory(0)); + sdn_connection = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAESDNTimeCompareGAM::Execute() { + using namespace MARTe; + bool connected; + + connected = !(esdntime_previous == *esdntime); + if (connected) *sdn_connection = 1; + else *sdn_connection = 0; + + esdntime_previous = *esdntime; + return true; +} + +CLASS_REGISTER(JAESDNTimeCompareGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h new file mode 100644 index 0000000..f8f00e9 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h @@ -0,0 +1,101 @@ +/** + * @file JAESDNTimeCompareGAM.h + * @brief Header file for class JAESDNTimeCompareGAM + * @date Feb, 2021 + * @author ksakakida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS 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 JAESDNTimeCompareGAM + * 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_JAESDNTimeCompareGAM_H_ +#define GAMS_JAESDNTimeCompareGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM that sends a message when one-cycle before ESDNTime and current one are same. This GAM is based on JAMessageGAM. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SDNTimeCompareGAM = {
+ *     Class = JAESDNTimeCompareGAM
+ *     InputSignals = {
+ *         ESDNTime = {
+ *             DataSource = "DDB1"
+ *             Type = uint32
+ *         }
+ *     }
+ *     OutputSignals = {
+ *          SDN_Connection = {
+ *              DataSource = "DDB1"
+ *              Type = uint32
+ *          }
+ *      }
+ * }
+ * 
+ */ + + +class JAESDNTimeCompareGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAESDNTimeCompareGAM(); + + virtual ~JAESDNTimeCompareGAM(); + + 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: + // ESDNTime holder + MARTe::uint32 esdntime_previous; + + // Input signals + MARTe::uint32 *esdntime; + + // Output signals + MARTe::uint32 *sdn_connection; // 0: disconnected, 1: connected + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAESDNTimeCompareGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/Makefile.gcc new file mode 100644 index 0000000..69e7cbe --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/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/JAESDNTimeCompareGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/Makefile.inc new file mode 100644 index 0000000..d456535 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/JAESDNTimeCompareGAM/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=JAESDNTimeCompareGAM.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)/JAESDNTimeCompareGAM$(LIBEXT) \ + $(BUILD_DIR)/JAESDNTimeCompareGAM$(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 index c55e6d0..0d5d5a4 100644 --- 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 @@ -120,7 +120,7 @@ bool JAModeControlGAM::Execute() { rfonTime = *inputSignals[9]; resetRemainingTime = false; pulseLengthLimit = CalcPulseLengthLimit(inputSignals); - REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + //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)) { 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 index d164e89..7e0fca5 100644 --- 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 @@ -36,7 +36,10 @@ /*---------------------------------------------------------------------------*/ /* Static definitions */ /*---------------------------------------------------------------------------*/ - +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} /*---------------------------------------------------------------------------*/ /* Method definitions */ /*---------------------------------------------------------------------------*/ @@ -64,7 +67,9 @@ JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); stopRequest = NULL_PTR(MARTe::uint32 *); modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); - sdnCommand = NULL_PTR(MARTe::uint16 *); + Command = NULL_PTR(MARTe::uint16 *); + Command2 = NULL_PTR(MARTe::uint16 *); + sdnStatus = NULL_PTR(MARTe::uint8 *); // write out target. outputSignal = NULL_PTR(MARTe::uint32 *); @@ -81,6 +86,17 @@ JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { aps_swon_is_on = false; bps_hvon_is_on = false; bps_swon_is_on = false; + + sdnCommand = 0; + groupFix = 0; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; } JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { @@ -135,21 +151,21 @@ bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const current bool JASDNRTStateMachineGAM::Setup() { using namespace MARTe; - bool ok = (numberOfInputSignals == 11u); + bool ok = (numberOfInputSignals == 13u); if (ok) { - ok = (numberOfOutputSignals == 8u); + ok = (numberOfOutputSignals == 15u); if (!ok) { - REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "15 output signals shall be defined"); } } else { - REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "13 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); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit || inputType == UnsignedInteger8Bit); if (!ok) { StreamString signalName; (void) GetSignalName(InputSignals, c, signalName); @@ -162,7 +178,7 @@ bool JASDNRTStateMachineGAM::Setup() { uint32 c; for (c = 0u; c < numberOfOutputSignals; c++) { TypeDescriptor outputType = GetSignalType(OutputSignals, c); - ok = (outputType == UnsignedInteger32Bit); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); if (!ok) { StreamString signalName; (void) GetSignalName(InputSignals, c, signalName); @@ -181,7 +197,9 @@ bool JASDNRTStateMachineGAM::Setup() { triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); stopRequest = reinterpret_cast(GetInputSignalMemory(8)); modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); - sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + Command = reinterpret_cast(GetInputSignalMemory(10)); + Command2 = reinterpret_cast(GetInputSignalMemory(11)); + sdnStatus = reinterpret_cast(GetInputSignalMemory(12)); outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); @@ -191,6 +209,15 @@ bool JASDNRTStateMachineGAM::Setup() { 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)); + + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(14)); *shotCounter = 0; } return ok; @@ -198,11 +225,19 @@ bool JASDNRTStateMachineGAM::Setup() { bool JASDNRTStateMachineGAM::Execute() { using namespace MARTe; + if (!groupFix && (*triggerSignal != false)) { + sdnCommand = (1 - *sdnStatus)*(*Command) + (*sdnStatus)*(*Command2); + groupFix = 1; + sdnStatusFix = *sdnStatus; + } + else { + sdnCommand = (1 - sdnStatusFix)*(*Command) + sdnStatusFix*(*Command2); + } if (currentState == WaitTrigger) { //State Transition condition if ((*triggerSignal == conditionTrigger)) { - REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); plcOnTime = *currentTime; //Save pulse start time. *outputBeamON = 0; //State transition. @@ -213,20 +248,22 @@ bool JASDNRTStateMachineGAM::Execute() { //Actions in this state. if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { - *outputSignal -= aps_swon; + *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; - REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + 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; - REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + *outputAPSHVON=1; } *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. @@ -242,7 +279,7 @@ bool JASDNRTStateMachineGAM::Execute() { *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. // State change conditions - if (*sdnCommand == 1){ + if (sdnCommand == 1){ sdnTriggerTime = *currentTime; currentState = SwitchingHVPS_SWON; } @@ -262,68 +299,80 @@ bool JASDNRTStateMachineGAM::Execute() { 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); + 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 >= (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); + 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 >= (sdnTriggerTime + *triggerDelay_aps_swon)){ //Do action *outputSignal += aps_swon; - aps_swon_is_on = true; + 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); + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; } *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. if (bps_swon_is_on || mhvps_hvon_is_on){ - *outputHVInjection = 0; + *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"); + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); } } else if (currentState == RFON) { //SDN command processing. - if (*sdnCommand == 4 && aps_swon_is_on) { + if (sdnCommand == 4 && aps_swon_is_on) { *outputSignal -= aps_swon; - aps_swon_is_on = false; - REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + aps_swon_is_on = false; aps_swon_state=0; + //REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + *outputAPSSWON=0; } - if (*sdnCommand == 3 && !aps_swon_is_on) { + if (sdnCommand == 3 && !aps_swon_is_on) { *outputSignal += aps_swon; - aps_swon_is_on = true; - REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + aps_swon_is_on = true; aps_swon_state=0; + //REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + *outputAPSSWON=1; } //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"); + 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."); + //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; + aps_swon_is_on = false; aps_swon_state=0; bps_hvon_is_on = false; bps_swon_is_on = false; - REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); } - *outputRFON = 0; + *outputRFON = 1; *outputBeamONTime = *currentTime - plcOnTime; *outputRFONTime = *currentTime - apsSwonTime; @@ -332,29 +381,37 @@ bool JASDNRTStateMachineGAM::Execute() { 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"); + //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; + *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, "state was changed to WaitTrigger"); + groupFix = 0; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); } } - + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~p4Value; return true; } 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 index 91b4199..69f0eee 100644 --- 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 @@ -92,10 +92,18 @@ * DataSource = DDB1 * Type = uint32 * } - * Command = { + * Command = {//from packet x * DataSource = RealTimeThreadAsyncBridge * Type = uint16 * } + * Command2 = {//from packet y + * DataSource = RealTimeThreadAsyncBridge + * Type = uint16 + * } + * ESDNStatus = {// 0 or 1. If 0, packet x is used, elif 1, packet y is used. + * DataSource = RealTimeThreadAsyncBridge + * Type = uint8 + * } * } * OutputSignals = { * Value = { @@ -199,8 +207,12 @@ private: MARTe::uint32 *stopRequest; // Input signal for pulse length limit by mode. MARTe::uint32 *modePulseLengthLimit; - // Input signal for SDN commands. - MARTe::uint16 *sdnCommand; + // Input signal for SDN commands from packet x. + MARTe::uint16 *Command; + // Input signal for SDN commands from packet y. + MARTe::uint16 *Command2; + // Input signal for SDN status. + MARTe::uint8 *sdnStatus; ///////////////////////////////////////////////////////////// // Output signal to which the output value will be written. @@ -217,6 +229,17 @@ private: MARTe::uint32 *outputRFONTime; // shot counter (coutup every RFON time.) MARTe::uint32 *shotCounter; + + // Added for HVPS state (20210602) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; ////////////////////////////// //Internal Parameters @@ -226,6 +249,7 @@ private: //APS_SWON time holder MARTe::uint32 apsSwonTime; MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; //PS turn off delay MARTe::uint32 turn_off_delay; @@ -239,6 +263,22 @@ private: bool bps_hvon_is_on; bool bps_swon_is_on; + //command x or y + MARTe::uint16 sdnCommand; + //packet group must not be changed during real time operation + MARTe::uint16 groupFix; //0: packet group is not fixed yet, 1: fixed. + //when packet group is fixed, sdnStatus is copied to this variable. + MARTe::uint8 sdnStatusFix; + + // 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; + }; 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 index 8dfc149..b4171ae 100644 --- a/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc +++ b/EC-GN-JA-PCF-IN/src/main/c++/GAMs/Makefile.inc @@ -27,7 +27,8 @@ 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 + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x \ + JAESDNTimeCompareGAM.x MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyro_Test.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyro_Test.cfg new file mode 100644 index 0000000..814a56c --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyro_Test.cfg @@ -0,0 +1,5214 @@ +// 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 + } + } + +GoErrorFromWaitHVON_SDNGAM = { + Class = JAMessageGAM + Operation = OR + //ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1 0} + 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 + } + //SDN_Connection = { + // DataSource = DDB1 + // 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}} + } + ESDNStatus = { + DataSource = SDNSubCommands + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + Ranges = {{0 0}} + } + ESDNTime = { + DataSource = SDNSubCommands + Type = uint32 + NumberOfDimensions = 1 + NumberOfElements = 1 + } + } + OutputSignals = { + Command = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNStatus = { + DataSource = RealTimeThreadAsyncBridge + Type = uint8 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + } + +SDNCommandGAM2 = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands2 + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + } + } + OutputSignals = { + Command2 = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + } + } + +debugGAM = {//for validation func. debug + Class = IOGAM + InputSignals = { + SDN_Connection = { + DataSource = DDB1 + Type = uint32 + } + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + SDN_Connection_DISP = { + DataSource = Display + Type = uint32 + } + ESDNTime_DISP = { + DataSource = Display + Type = uint32 + } + } + } + +debugGAM_Group = {//for group func. debug + Class = IOGAM + InputSignals = { + ESDNStatus = { + DataSource = SDNSubCommands + Type = uint8 + } + Command = { + DataSource = SDNSubCommands + Type = uint16 + Ranges = {{0 0}} + } + } + OutputSignals = { + ESDNStatus1_DISP = { + DataSource = Display + Type = uint8 + } + Command1_DISP = { + DataSource = Display + Type = uint16 + } + } + } + +debugGAM_Group2 = {//for group func. debug + Class = IOGAM + InputSignals = { + ESDNStatus = { + DataSource = SDNSubCommands2 + Type = uint8 + } + Command = { + DataSource = SDNSubCommands2 + Type = uint16 + Ranges = {{0 0}} + } + } + OutputSignals = { + ESDNStatus2_DISP = { + DataSource = Display + Type = uint8 + } + Command2_DISP = { + DataSource = Display + Type = uint16 + } + } + } + +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 + } + } + } + +SDNTimeCompareGAM = { // for "Validation" functionality + Class = JAESDNTimeCompareGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + SDN_Connection = { + DataSource = DDB1 + Type = uint32 + } + } + } + + // 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 + Frequency = 900 //TimeCompareGAM for validation function properly work at 900Hz + } + } + 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 = 10000 + //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 + } + Command2 = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNStatus = { + DataSource = RealTimeThreadAsyncBridge + Type = uint8 + } + } + 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 + } + //Added 20210602 + 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 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } + } + } + + //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 + NumberOfBuffers = 64 + Class = GAMDataSource + AllowNoProducers = 1 + } + // 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-P01-HWCF:6259-0-STATUS" + Type = uint32 + } + PXI6259_1 = { + PVName = "EC-GN-P01-HWCF:6259-1-STATUS" + Type = uint32 + } + PXI6528_0 = { + PVName = "EC-GN-P01-HWCF:6528-0-STATUS" + Type = uint32 + } + PXI6528_1 = { + PVName = "EC-GN-P01-HWCF:6528-1-STATUS" + Type = uint32 + } + PXI6368_0 = { + PVName = "EC-GN-P01-HWCF:6368-0-STATUS" + Type = uint32 + } + PXI6368_1 = { + PVName = "EC-GN-P01-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 = enp17s0f0 + 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 + } + } + } + +SDNSubCommands2 = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA2 + Interface = enp17s0f0 + 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 = enp17s0f0 + 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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 GoErrorFromWaitHVON_SDNGAM } + CPUs = 0x100 + } + +Thread2 = { + Class = RealTimeThread + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + CPUs = 0x200 + } + +Thread3 = { + Class = RealTimeThread + Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM + NI6528P3GAM NI6528P4GAM + GAMSDNRealTimeStateMachine 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 SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } + 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/JAGyrotronA_FY19_P1.cfg b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Configurations/JAGyrotronA_FY19_P1.cfg index a4cf645..5615a6a 100644 --- 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 @@ -2325,6 +2325,63 @@ Function = GoError } } + +GoErrorFromWaitHVON_SDNGAM = { + Class = JAMessageGAM + Operation = OR + //ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1 0} + 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 + } + //SDN_Connection = { + // DataSource = DDB1 + // Type = uint32 + //} + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } // Reset HVPS outputs. ToDo: Fix to access NI d.s. +ResetPSsGAM = { Class = ConstantGAM @@ -2403,8 +2460,13 @@ NumberOfDimensions = 1 NumberOfElements = 64 Ranges = {{0 0}} - // TODO uncomment this for release/testing - //Frequency = 1 + } + ESDNStatus = { + DataSource = SDNSubCommands + Type = uint8 + NumberOfDimensions = 1 + NumberOfElements = 1 + Ranges = {{0 0}} } ESDNTime = { DataSource = SDNSubCommands @@ -2418,17 +2480,39 @@ DataSource = RealTimeThreadAsyncBridge Type = uint16 } + ESDNStatus = { + DataSource = RealTimeThreadAsyncBridge + Type = uint8 + } ESDNTime = { DataSource = DDB1 Type = uint32 } } } - +debugSDNGAM = {//for debug + +SDNCommandGAM2 = { Class = IOGAM InputSignals = { Command = { + DataSource = SDNSubCommands2 + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + } + } + OutputSignals = { + Command2 = { DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + } + } + +debugGAM = {//for validation func. debug + Class = IOGAM + InputSignals = { + SDN_Connection = { + DataSource = DDB1 Type = uint32 } ESDNTime = { @@ -2437,9 +2521,9 @@ } } OutputSignals = { - Command_DISP = { + SDN_Connection_DISP = { DataSource = Display - Type = float32 + Type = uint32 } ESDNTime_DISP = { DataSource = Display @@ -2447,6 +2531,54 @@ } } } + +debugGAM_Group = {//for group func. debug + Class = IOGAM + InputSignals = { + ESDNStatus = { + DataSource = SDNSubCommands + Type = uint8 + } + Command = { + DataSource = SDNSubCommands + Type = uint16 + Ranges = {{0 0}} + } + } + OutputSignals = { + ESDNStatus1_DISP = { + DataSource = Display + Type = uint8 + } + Command1_DISP = { + DataSource = Display + Type = uint16 + } + } + } + +debugGAM_Group2 = {//for group func. debug + Class = IOGAM + InputSignals = { + ESDNStatus = { + DataSource = SDNSubCommands2 + Type = uint8 + } + Command = { + DataSource = SDNSubCommands2 + Type = uint16 + Ranges = {{0 0}} + } + } + OutputSignals = { + ESDNStatus2_DISP = { + DataSource = Display + Type = uint8 + } + Command2_DISP = { + DataSource = Display + Type = uint16 + } + } + } +SDNReplyGAM = { Class = IOGAM InputSignals = { @@ -2659,7 +2791,21 @@ } } } - //Write SDN waveform data into PS setpoint PV. + +SDNTimeCompareGAM = { // for "Validation" functionality + Class = JAESDNTimeCompareGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + SDN_Connection = { + DataSource = DDB1 + Type = uint32 + } + } + } // Timer for SDN thread. +TimeSDNGAM = { @@ -2672,7 +2818,8 @@ Counter = { DataSource = TimerSDN Type = uint32 - Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + //Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + Frequency = 900 //TimeCompareGAM for validation function properly work at 900Hz } } OutputSignals = { @@ -2698,7 +2845,7 @@ Counter = { DataSource = Timer Type = uint32 - Frequency = 200000 //operation:10k(=100us cyc) + Frequency = 10000 //Frequency = 100000 //operation:100k(=10us cyc) } RTThreadPerf = { @@ -3191,7 +3338,14 @@ DataSource = RealTimeThreadAsyncBridge Type = uint16 } - + Command2 = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNStatus = { + DataSource = RealTimeThreadAsyncBridge + Type = uint8 + } } OutputSignals = { RTSMValue = { @@ -3227,6 +3381,37 @@ DataSource = RealTimeThreadAsyncBridge Type = uint32 } + //Added 20210602 + 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 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4Value = { + DataSource = NI6528P4 + //DataSource = DDB1 + Type = uint8 + } } } @@ -3572,8 +3757,11 @@ } // for data exechange between threads. +RealTimeThreadAsyncBridge = { - Class = RealTimeThreadAsyncBridge - NumberOfBuffers = 20 + //Class = RealTimeThreadAsyncBridge + //NumberOfBuffers = 20 + NumberOfBuffers = 64 + Class = GAMDataSource + AllowNoProducers = 1 } // for access ECPIS PV. +EPICSCAInput = { @@ -4205,27 +4393,27 @@ } //PXI Board status PVs PXI6259_0 = { - PVName = "EC-GN-HWCF:6259-0-STATUS" + PVName = "EC-GN-P01-HWCF:6259-0-STATUS" Type = uint32 } PXI6259_1 = { - PVName = "EC-GN-HWCF:6259-1-STATUS" + PVName = "EC-GN-P01-HWCF:6259-1-STATUS" Type = uint32 } PXI6528_0 = { - PVName = "EC-GN-HWCF:6528-0-STATUS" + PVName = "EC-GN-P01-HWCF:6528-0-STATUS" Type = uint32 } PXI6528_1 = { - PVName = "EC-GN-HWCF:6528-1-STATUS" + PVName = "EC-GN-P01-HWCF:6528-1-STATUS" Type = uint32 } PXI6368_0 = { - PVName = "EC-GN-HWCF:6368-0-STATUS" + PVName = "EC-GN-P01-HWCF:6368-0-STATUS" Type = uint32 } PXI6368_1 = { - PVName = "EC-GN-HWCF:6368-1-STATUS" + PVName = "EC-GN-P01-HWCF:6368-1-STATUS" Type = uint32 } } @@ -4457,6 +4645,51 @@ } } } + +SDNSubCommands2 = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA2 + 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 @@ -4740,7 +4973,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { @@ -4766,7 +4999,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { @@ -4792,7 +5025,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { @@ -4818,7 +5051,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { @@ -4848,7 +5081,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { @@ -4875,19 +5108,19 @@ choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM writeBeamONTimeGAM writeRFONTimeGAM - FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorFromWaitHVON_SDNGAM } CPUs = 0x100 } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { Class = RealTimeThread Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM NI6528P3GAM NI6528P4GAM - GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + GAMSDNRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} CPUs = 0x400 } } @@ -4907,7 +5140,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { @@ -4934,14 +5167,14 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { Class = RealTimeThread Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM NI6528P3GAM NI6528P4GAM - GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + GAMSDNRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} CPUs = 0x400 } } @@ -4955,12 +5188,12 @@ Class = RealTimeThread Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM ExitedHVArmedInjectionRFONGAM ResetPSsGAM - FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM } CPUs = 0x100 } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x200 } +Thread3 = { 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 index 6fb3d04..332d693 100644 --- 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 @@ -2301,6 +2301,63 @@ Function = GoError } } + +GoErrorFromWaitHVON_SDNGAM = { + Class = JAMessageGAM + Operation = OR + //ExpectedIntValues = {1 1 1 1 1 1 1 1 1 1 0} + 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 + } + //SDN_Connection = { + // DataSource = DDB1 + // Type = uint32 + //} + } + +Event = { + Class = Message + Destination = StateMachine + Function = GoError + } + } // Reset HVPS outputs. ToDo: Fix to access NI d.s. +ResetPSsGAM = { Class = ConstantGAM @@ -2399,7 +2456,24 @@ } } } - + +SDNCommandGAM2 = { + Class = IOGAM + InputSignals = { + Command = { + DataSource = SDNSubCommands2 + Type = uint16 + NumberOfDimensions = 1 + NumberOfElements = 64 + Ranges = {{0 0}} + } + } + OutputSignals = { + Command2 = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + } + } +SDNReplyGAM = { Class = IOGAM InputSignals = { @@ -2612,7 +2686,21 @@ } } } - //Write SDN waveform data into PS setpoint PV. + +SDNTimeCompareGAM = { // for "Validation" functionality + Class = JAESDNTimeCompareGAM + InputSignals = { + ESDNTime = { + DataSource = DDB1 + Type = uint32 + } + } + OutputSignals = { + SDN_Connection = { + DataSource = DDB1 + Type = uint32 + } + } + } // Timer for SDN thread. +TimeSDNGAM = { @@ -2625,12 +2713,8 @@ Counter = { DataSource = TimerSDN Type = uint32 - Frequency = 1000 //operation:1k(=1ms cyc), debug:10 - } - RTThreadPerf = { - DataSource = Timings - Alias = "WaitHVON.Thread3_CycleTime" - Type = uint32 + //Frequency = 1000 //operation:1k(=1ms cyc), debug:10 + Frequency = 900 //TimeCompareGAM for validation function properly work at 900Hz for QST ECPC } } OutputSignals = { @@ -2642,10 +2726,6 @@ DataSource = DDB1 Type = uint32 } - RTThreadPerfSDN = { - DataSource = DDB1 - Type = uint32 - } } } @@ -2660,7 +2740,8 @@ Counter = { DataSource = Timer Type = uint32 - Frequency = 200000 //operation:100k(=10us cyc), debug:10 + Frequency = 10000 + //Frequency = 100000 //operation:100k(=10us cyc), debug:10 } RTThreadPerf = { DataSource = Timings @@ -3228,6 +3309,14 @@ DataSource = RealTimeThreadAsyncBridge Type = uint16 } + Command2 = { + DataSource = RealTimeThreadAsyncBridge + Type = uint16 + } + ESDNStatus = { + DataSource = RealTimeThreadAsyncBridge + Type = uint8 + } } OutputSignals = { @@ -3264,6 +3353,37 @@ DataSource = RealTimeThreadAsyncBridge Type = uint32 } + //Added 20210603 + 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 + } + NI6528P3Value = { + DataSource = NI6528P3 + //DataSource = DDB1 + Type = uint8 + } + NI6528P4GYAValue = { + DataSource = NI6528P4GYA + //DataSource = DDB1 + Type = uint8 + } } } @@ -3496,8 +3616,11 @@ } // for data exechange between threads. +RealTimeThreadAsyncBridge = { - Class = RealTimeThreadAsyncBridge - NumberOfBuffers = 20 + //Class = RealTimeThreadAsyncBridge + //NumberOfBuffers = 20 + NumberOfBuffers = 64 + Class = GAMDataSource + AllowNoProducers = 1 } // for access ECPIS PV. +EPICSCAInput = { @@ -4155,27 +4278,27 @@ } //PXI Board status PVs PXI6259_0 = { - PVName = "EC-GN-HWCF:6259-0-STATUS" + PVName = "EC-GN-P01-HWCF:6259-0-STATUS" Type = uint32 } PXI6259_1 = { - PVName = "EC-GN-HWCF:6259-1-STATUS" + PVName = "EC-GN-P01-HWCF:6259-1-STATUS" Type = uint32 } PXI6528_0 = { - PVName = "EC-GN-HWCF:6528-0-STATUS" + PVName = "EC-GN-P01-HWCF:6528-0-STATUS" Type = uint32 } PXI6528_1 = { - PVName = "EC-GN-HWCF:6528-1-STATUS" + PVName = "EC-GN-P01-HWCF:6528-1-STATUS" Type = uint32 } PXI6368_0 = { - PVName = "EC-GN-HWCF:6368-0-STATUS" + PVName = "EC-GN-P01-HWCF:6368-0-STATUS" Type = uint32 } PXI6368_1 = { - PVName = "EC-GN-HWCF:6368-1-STATUS" + PVName = "EC-GN-P01-HWCF:6368-1-STATUS" Type = uint32 } } @@ -4366,6 +4489,51 @@ 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 + } + } + } + +SDNSubCommands2 = { + Class = SDN::SDNSubscriber + Topic = ECPC2SCUJA2 + Interface = enp27s0f0 CPUs = 0x2000 Locked = 1 Timeout = 2 @@ -4710,7 +4878,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { @@ -4731,12 +4899,12 @@ Class = RealTimeThread Functions = {Timer1kHzGAM CCPSWaveformGAM FHPSSetpointGAM FHPSRampupGAM InWaitStandbyGAM choiseGAM MCPSGAM GCPSGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM - GoDisabledGAM GoWaitReadyGAM GoErrorGAM CCPSWaveformGAM } + GoDisabledGAM GoWaitReadyGAM GoErrorGAM } CPUs = 0x1000 } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { @@ -4762,7 +4930,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { @@ -4788,7 +4956,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { @@ -4818,7 +4986,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { @@ -4840,19 +5008,19 @@ choiseGAM EPICSOutputGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM writeBeamONStateGAM writeHVArmedStateGAM writeHVInjectionStateGAM writeRFONStateGAM writeBeamONTimeGAM writeRFONTimeGAM - FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorGAM } + FromWaitHVONToWaitStandby FromWaitHVONToWaitPermit GoErrorFromWaitHVON_SDNGAM } CPUs = 0x1000 } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { Class = RealTimeThread Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM - GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + GAMSDNRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} CPUs = 0x4000 } } @@ -4872,7 +5040,7 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { @@ -4899,14 +5067,14 @@ } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { Class = RealTimeThread Functions = {Timer100kHzGAM GAMEPICSCA StopRequestGAM ModeLimitGAM NI6528P3GAM NI6528P4GAM NI6528P4GYAGAM NI6528P4PV2PortGAM NI6528P4WriteGAM - GAMSDNRealTimeStateMachine terminalInterfaceGAM NI6528P5GAM NI6528P5PV2PortGAM} + GAMSDNRealTimeStateMachine NI6528P5GAM NI6528P5PV2PortGAM} CPUs = 0x4000 } } @@ -4920,12 +5088,12 @@ Class = RealTimeThread Functions = {Timer1kHzGAM InErrorGAM PXI6368Error03GAM PXI6368Error04GAM PXI6259ErrorGAM PXIErrorGAM ExitedHVArmedInjectionRFONGAM ResetPSsGAM - FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM} + FromErrorToWaitStandbyGAM ErrorGAM choiseGAM EPICSOutputGAM FHPSSetpointGAM FHPSRampupGAM CCPSWaveformGAM } CPUs = 0x1000 } +Thread2 = { Class = RealTimeThread - Functions = {TimeSDNGAM SDNCommandGAM SDNReplyGAM} + Functions = {TimeSDNGAM SDNCommandGAM SDNCommandGAM2 SDNReplyGAM SDNTimeCompareGAM } CPUs = 0x2000 } +Thread3 = { diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp new file mode 100644 index 0000000..2986976 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.cpp @@ -0,0 +1,132 @@ +/** + * @file JAESDNTimeCompareGAM.cpp + * @brief Source file for class JAESDNTimeCompareGAM + * @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 JAESDNTimeCompareGAM (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 "JAESDNTimeCompareGAM.h" +#include "AdvancedErrorManagement.h" + +/*---------------------------------------------------------------------------*/ +/* Static definitions */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Method definitions */ +/*---------------------------------------------------------------------------*/ + +JAESDNTimeCompareGAM::JAESDNTimeCompareGAM() { + //ESDNTime holder + esdntime_previous = 0; + + //Input signals. + esdntime = NULL_PTR(MARTe::uint32 *); + + //Output signals. + sdn_connection = NULL_PTR(MARTe::uint32 *); + +} + +JAESDNTimeCompareGAM::~JAESDNTimeCompareGAM() { + if (esdntime != NULL_PTR(MARTe::uint32 *)) { + delete[] esdntime; + } + if (sdn_connection != NULL_PTR(MARTe::uint32 *)) { + delete[] sdn_connection; + } +} + +bool JAESDNTimeCompareGAM::Initialise(MARTe::StructuredDataI & data) { + using namespace MARTe; + return GAM::Initialise(data); +} + +bool JAESDNTimeCompareGAM::PrepareNextState(const MARTe::char8 * const currentStateName, const MARTe::char8 * const nextStateName) { + return true; +} + +bool JAESDNTimeCompareGAM::Setup() { + // Setup memory for input/output signals on the GAM. + using namespace MARTe; + bool ok = (numberOfInputSignals == 1u); + // Do type check for input signals. + if (ok) { + ok = (numberOfOutputSignals == 1u); + if (!ok) { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of output signals shall be the same as " + "number of expected values."); + } + } else { + REPORT_ERROR(ErrorManagement::ParametersError, "Number of input signals shall be the same as " + "number of expected values."); + } + 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); + 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) { + esdntime = reinterpret_cast(GetInputSignalMemory(0)); + sdn_connection = reinterpret_cast(GetOutputSignalMemory(0)); + } + return ok; +} + +bool JAESDNTimeCompareGAM::Execute() { + using namespace MARTe; + bool connected; + + connected = !(esdntime_previous == *esdntime); + if (connected) *sdn_connection = 1; + else *sdn_connection = 0; + + esdntime_previous = *esdntime; + return true; +} + +CLASS_REGISTER(JAESDNTimeCompareGAM, "1.0") diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h new file mode 100644 index 0000000..f8f00e9 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/JAESDNTimeCompareGAM.h @@ -0,0 +1,101 @@ +/** + * @file JAESDNTimeCompareGAM.h + * @brief Header file for class JAESDNTimeCompareGAM + * @date Feb, 2021 + * @author ksakakida + * + * @copyright Copyright 2015 F4E | European Joint Undertaking for ITER and + * the Development of Fusion Energy ('Fusion for Energy'). + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved + * by the European Commission - subsequent versions of the EUPL (the "Licence") + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl + * + * @warning Unless required by applicable law or agreed to in writing, + * software distributed under the Licence is distributed on an "AS 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 JAESDNTimeCompareGAM + * 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_JAESDNTimeCompareGAM_H_ +#define GAMS_JAESDNTimeCompareGAM_H_ + +/*---------------------------------------------------------------------------*/ +/* Standard header includes */ +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* Project header includes */ +/*---------------------------------------------------------------------------*/ + +#include "GAM.h" + +/*---------------------------------------------------------------------------*/ +/* Class declaration */ +/*---------------------------------------------------------------------------*/ +/** + * @brief GAM that sends a message when one-cycle before ESDNTime and current one are same. This GAM is based on JAMessageGAM. + * @details Sample + * + * The configuration syntax is: + * + *
+ * +SDNTimeCompareGAM = {
+ *     Class = JAESDNTimeCompareGAM
+ *     InputSignals = {
+ *         ESDNTime = {
+ *             DataSource = "DDB1"
+ *             Type = uint32
+ *         }
+ *     }
+ *     OutputSignals = {
+ *          SDN_Connection = {
+ *              DataSource = "DDB1"
+ *              Type = uint32
+ *          }
+ *      }
+ * }
+ * 
+ */ + + +class JAESDNTimeCompareGAM : public MARTe::GAM, public MARTe::StatefulI { +public: + CLASS_REGISTER_DECLARATION() + + JAESDNTimeCompareGAM(); + + virtual ~JAESDNTimeCompareGAM(); + + 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: + // ESDNTime holder + MARTe::uint32 esdntime_previous; + + // Input signals + MARTe::uint32 *esdntime; + + // Output signals + MARTe::uint32 *sdn_connection; // 0: disconnected, 1: connected + +}; + + + +/*---------------------------------------------------------------------------*/ +/* Inline method definitions */ +/*---------------------------------------------------------------------------*/ + +#endif /* GAMS_JAESDNTimeCompareGAM_H_ */ diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/Makefile.gcc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/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/JAESDNTimeCompareGAM/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/JAESDNTimeCompareGAM/Makefile.inc b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/Makefile.inc new file mode 100644 index 0000000..69fb159 --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JAESDNTimeCompareGAM/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=JAESDNTimeCompareGAM.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)/JAESDNTimeCompareGAM$(LIBEXT) \ + $(BUILD_DIR)/JAESDNTimeCompareGAM$(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 index c55e6d0..0d5d5a4 100644 --- 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 @@ -120,7 +120,7 @@ bool JAModeControlGAM::Execute() { rfonTime = *inputSignals[9]; resetRemainingTime = false; pulseLengthLimit = CalcPulseLengthLimit(inputSignals); - REPORT_ERROR(ErrorManagement::Debug, "Pulse Length was set to Limit:%d", pulseLengthLimit); + //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)) { 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 deleted file mode 100644 index 56f9b18..0000000 --- a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/** - * @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 deleted file mode 100644 index e968f39..0000000 --- a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM-v1.h +++ /dev/null @@ -1,262 +0,0 @@ -/** - * @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_stable.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp deleted file mode 100644 index 71c7669..0000000 --- a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.cpp +++ /dev/null @@ -1,402 +0,0 @@ -/** - * @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 deleted file mode 100644 index e59f3fa..0000000 --- a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JARTStateMachineGAM/JARTStateMachineGAM_stable.h +++ /dev/null @@ -1,260 +0,0 @@ -/** - * @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/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/GAMs/JASDNRTStateMachineGAM/JASDNRTStateMachineGAM.cpp index d164e89..7e0fca5 100644 --- 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 @@ -36,7 +36,10 @@ /*---------------------------------------------------------------------------*/ /* Static definitions */ /*---------------------------------------------------------------------------*/ - +static MARTe::uint64 getCurrentTimeUs() { + using namespace MARTe; + return static_cast(HighResolutionTimer::Counter() * HighResolutionTimer::Period() * 1e6f + 0.5f); +} /*---------------------------------------------------------------------------*/ /* Method definitions */ /*---------------------------------------------------------------------------*/ @@ -64,7 +67,9 @@ JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { triggerDelay_shotlen = NULL_PTR(MARTe::uint32 *); stopRequest = NULL_PTR(MARTe::uint32 *); modePulseLengthLimit = NULL_PTR(MARTe::uint32 *); - sdnCommand = NULL_PTR(MARTe::uint16 *); + Command = NULL_PTR(MARTe::uint16 *); + Command2 = NULL_PTR(MARTe::uint16 *); + sdnStatus = NULL_PTR(MARTe::uint8 *); // write out target. outputSignal = NULL_PTR(MARTe::uint32 *); @@ -81,6 +86,17 @@ JASDNRTStateMachineGAM::JASDNRTStateMachineGAM() { aps_swon_is_on = false; bps_hvon_is_on = false; bps_swon_is_on = false; + + sdnCommand = 0; + groupFix = 0; + + apsSwonHighResolutionTime = 0; + + aps_hvon_state=0; + aps_swon_state=0; + mhvps_hvon_state=0; + bps_hvon_state=0; + bps_swon_state=0; } JASDNRTStateMachineGAM::~JASDNRTStateMachineGAM() { @@ -135,21 +151,21 @@ bool JASDNRTStateMachineGAM::PrepareNextState(const MARTe::char8 * const current bool JASDNRTStateMachineGAM::Setup() { using namespace MARTe; - bool ok = (numberOfInputSignals == 11u); + bool ok = (numberOfInputSignals == 13u); if (ok) { - ok = (numberOfOutputSignals == 8u); + ok = (numberOfOutputSignals == 15u); if (!ok) { - REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Seven output signals shall be defined"); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "15 output signals shall be defined"); } } else { - REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "Nine input signals shall be defined"); + REPORT_ERROR(MARTe::ErrorManagement::ParametersError, "13 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); + ok = (inputType == UnsignedInteger32Bit || inputType == UnsignedInteger16Bit || inputType == UnsignedInteger8Bit); if (!ok) { StreamString signalName; (void) GetSignalName(InputSignals, c, signalName); @@ -162,7 +178,7 @@ bool JASDNRTStateMachineGAM::Setup() { uint32 c; for (c = 0u; c < numberOfOutputSignals; c++) { TypeDescriptor outputType = GetSignalType(OutputSignals, c); - ok = (outputType == UnsignedInteger32Bit); + ok = (outputType == UnsignedInteger32Bit || outputType == UnsignedInteger8Bit); if (!ok) { StreamString signalName; (void) GetSignalName(InputSignals, c, signalName); @@ -181,7 +197,9 @@ bool JASDNRTStateMachineGAM::Setup() { triggerDelay_shotlen = reinterpret_cast(GetInputSignalMemory(7)); stopRequest = reinterpret_cast(GetInputSignalMemory(8)); modePulseLengthLimit = reinterpret_cast(GetInputSignalMemory(9)); - sdnCommand = reinterpret_cast(GetInputSignalMemory(10)); + Command = reinterpret_cast(GetInputSignalMemory(10)); + Command2 = reinterpret_cast(GetInputSignalMemory(11)); + sdnStatus = reinterpret_cast(GetInputSignalMemory(12)); outputSignal = reinterpret_cast(GetOutputSignalMemory(0)); outputBeamON = reinterpret_cast(GetOutputSignalMemory(1)); @@ -191,6 +209,15 @@ bool JASDNRTStateMachineGAM::Setup() { 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)); + + outputSignalNI6528P3 = reinterpret_cast(GetOutputSignalMemory(13)); + outputSignalNI6528P4 = reinterpret_cast(GetOutputSignalMemory(14)); *shotCounter = 0; } return ok; @@ -198,11 +225,19 @@ bool JASDNRTStateMachineGAM::Setup() { bool JASDNRTStateMachineGAM::Execute() { using namespace MARTe; + if (!groupFix && (*triggerSignal != false)) { + sdnCommand = (1 - *sdnStatus)*(*Command) + (*sdnStatus)*(*Command2); + groupFix = 1; + sdnStatusFix = *sdnStatus; + } + else { + sdnCommand = (1 - sdnStatusFix)*(*Command) + sdnStatusFix*(*Command2); + } if (currentState == WaitTrigger) { //State Transition condition if ((*triggerSignal == conditionTrigger)) { - REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); + //REPORT_ERROR(ErrorManagement::Debug, "Start beam-on sequence in SDN mode."); plcOnTime = *currentTime; //Save pulse start time. *outputBeamON = 0; //State transition. @@ -213,20 +248,22 @@ bool JASDNRTStateMachineGAM::Execute() { //Actions in this state. if (*stopRequest != 0 || *triggerSignal != conditionTrigger) { - *outputSignal -= aps_swon; + *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; - REPORT_ERROR(ErrorManagement::Debug, "bps_hvon was set to outputSignal at %d.", *currentTime); + 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; - REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + aps_hvon_is_on = true; aps_hvon_state=1; + //REPORT_ERROR(ErrorManagement::Debug, "aps_hvon was set to outputSignal."); + *outputAPSHVON=1; } *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. @@ -242,7 +279,7 @@ bool JASDNRTStateMachineGAM::Execute() { *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. // State change conditions - if (*sdnCommand == 1){ + if (sdnCommand == 1){ sdnTriggerTime = *currentTime; currentState = SwitchingHVPS_SWON; } @@ -262,68 +299,80 @@ bool JASDNRTStateMachineGAM::Execute() { 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); + 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 >= (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); + 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 >= (sdnTriggerTime + *triggerDelay_aps_swon)){ //Do action *outputSignal += aps_swon; - aps_swon_is_on = true; + 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); + //REPORT_ERROR(ErrorManagement::Debug, "aps_swon was set to outputSignal at %d.", *currentTime); + *outputAPSSWON=1; } *outputBeamONTime = *currentTime - plcOnTime; //Save RFON start time. if (bps_swon_is_on || mhvps_hvon_is_on){ - *outputHVInjection = 0; + *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"); + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to RFON"); } } else if (currentState == RFON) { //SDN command processing. - if (*sdnCommand == 4 && aps_swon_is_on) { + if (sdnCommand == 4 && aps_swon_is_on) { *outputSignal -= aps_swon; - aps_swon_is_on = false; - REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + aps_swon_is_on = false; aps_swon_state=0; + //REPORT_ERROR(ErrorManagement::Debug, "sdn command was 4"); + *outputAPSSWON=0; } - if (*sdnCommand == 3 && !aps_swon_is_on) { + if (sdnCommand == 3 && !aps_swon_is_on) { *outputSignal += aps_swon; - aps_swon_is_on = true; - REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + aps_swon_is_on = true; aps_swon_state=0; + //REPORT_ERROR(ErrorManagement::Debug, "sdn command was 3"); + *outputAPSSWON=1; } //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"); + 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."); + //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; + aps_swon_is_on = false; aps_swon_state=0; bps_hvon_is_on = false; bps_swon_is_on = false; - REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); + *outputAPSHVON=0; + *outputAPSSWON=0; + *outputBPSHVON=0; + *outputBPSSWON=0; + *outputMHVPSON=0; + //REPORT_ERROR(ErrorManagement::Debug, "0 was set to outputSignal at %d.", *currentTime); } - *outputRFON = 0; + *outputRFON = 1; *outputBeamONTime = *currentTime - plcOnTime; *outputRFONTime = *currentTime - apsSwonTime; @@ -332,29 +381,37 @@ bool JASDNRTStateMachineGAM::Execute() { 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"); + //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; + *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, "state was changed to WaitTrigger"); + groupFix = 0; + //REPORT_ERROR(ErrorManagement::Debug, "state was changed to WaitTrigger"); } } - + p3Value = 1*aps_hvon_state +2*aps_swon_state + 8*bps_hvon_state +16*bps_swon_state + 64*(*outputBeamON); + *outputSignalNI6528P3 = ~p3Value; + p4Value = 8*mhvps_hvon_state; + *outputSignalNI6528P4 = ~p4Value; return true; } 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 index 91b4199..69f0eee 100644 --- 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 @@ -92,10 +92,18 @@ * DataSource = DDB1 * Type = uint32 * } - * Command = { + * Command = {//from packet x * DataSource = RealTimeThreadAsyncBridge * Type = uint16 * } + * Command2 = {//from packet y + * DataSource = RealTimeThreadAsyncBridge + * Type = uint16 + * } + * ESDNStatus = {// 0 or 1. If 0, packet x is used, elif 1, packet y is used. + * DataSource = RealTimeThreadAsyncBridge + * Type = uint8 + * } * } * OutputSignals = { * Value = { @@ -199,8 +207,12 @@ private: MARTe::uint32 *stopRequest; // Input signal for pulse length limit by mode. MARTe::uint32 *modePulseLengthLimit; - // Input signal for SDN commands. - MARTe::uint16 *sdnCommand; + // Input signal for SDN commands from packet x. + MARTe::uint16 *Command; + // Input signal for SDN commands from packet y. + MARTe::uint16 *Command2; + // Input signal for SDN status. + MARTe::uint8 *sdnStatus; ///////////////////////////////////////////////////////////// // Output signal to which the output value will be written. @@ -217,6 +229,17 @@ private: MARTe::uint32 *outputRFONTime; // shot counter (coutup every RFON time.) MARTe::uint32 *shotCounter; + + // Added for HVPS state (20210602) + MARTe::uint32 *outputAPSHVON; + MARTe::uint32 *outputAPSSWON; + MARTe::uint32 *outputBPSHVON; + MARTe::uint32 *outputBPSSWON; + MARTe::uint32 *outputMHVPSON; + + // Output signals for NI devices + MARTe::uint8 *outputSignalNI6528P3; + MARTe::uint8 *outputSignalNI6528P4; ////////////////////////////// //Internal Parameters @@ -226,6 +249,7 @@ private: //APS_SWON time holder MARTe::uint32 apsSwonTime; MARTe::uint32 apsSwoffTime; + MARTe::uint64 apsSwonHighResolutionTime; //PS turn off delay MARTe::uint32 turn_off_delay; @@ -239,6 +263,22 @@ private: bool bps_hvon_is_on; bool bps_swon_is_on; + //command x or y + MARTe::uint16 sdnCommand; + //packet group must not be changed during real time operation + MARTe::uint16 groupFix; //0: packet group is not fixed yet, 1: fixed. + //when packet group is fixed, sdnStatus is copied to this variable. + MARTe::uint8 sdnStatusFix; + + // 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; + }; 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 index 9dfc5c1..bcf3450 100644 --- 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 @@ -27,7 +27,8 @@ 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 + JABitSumGAM.x JAConditionalSignalUpdateGAM.x JASourceChoiseGAM.x JABitReverseGAM.x \ + JAESDNTimeCompareGAM.x MAKEDEFAULTDIR=$(MARTe2_DIR)/MakeDefaults 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 old mode 100644 new mode 100755 index b425a77..4070fe0 --- 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 @@ -123,6 +123,7 @@ 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/ +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/GAMs/JAESDNTimeCompareGAM/ ### 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/ 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 old mode 100644 new mode 100755 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 old mode 100644 new mode 100755 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 old mode 100644 new mode 100755 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 old mode 100644 new mode 100755 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 old mode 100644 new mode 100755 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 old mode 100644 new mode 100755 diff --git a/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runTest.sh b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runTest.sh new file mode 100755 index 0000000..f56837a --- /dev/null +++ b/EC-GN-JA-PCF-IN/src/main/resources/qst-gyrotron-fast-controller/Startup/runTest.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +taskset -c 8-11 ./Main.sh -f ../Configurations/JAGyro_Test.cfg -l RealTimeLoader -m StateMachine:Start + 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 index 82a2603..d4b76bb 100644 --- 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 @@ -60,6 +60,7 @@ while(1): 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 + 11: GYA / Async mode several times --- operator set delay and pulse length on HMI ''' inpval = raw_input() @@ -83,8 +84,10 @@ while(1): test_async.test_async_GYA_manual() elif inpval == "10": test_async.test_async_GYB_manual() + elif inpval == "11": + test_async.test_async_GYA_times() else: - print 'invalid value. Enter 1 to 10!' + print 'invalid value. Enter 1 to 11!' 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 index 8f595b2..0a78b0b 100644 --- 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 @@ -147,7 +147,7 @@ def test_async_shortpulse(): 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) + res = subprocess.call('caput EC-GN-P01-GAF:STAT-DT-SHOTLEN 100', 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) @@ -412,3 +412,43 @@ def test_async_GYB_manual(): 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_times(): + """" + Test GYA operation with Async mode several times. + """ + print '1.. Set delays and pulse length on HMI\n and set sleep time here:' + inp_val = raw_input() + try: + sleep_time = float(inp_val) + except: + return + print 'How many times is the pulse generated?' + times = raw_input() + for i in range(1, int(times) + 1): + # 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 '%d times beam-on complete' % i + res = subprocess.call('caget EC-GN-P01-GAF:STAT-BEAMON-TIME >> BEAMON-TIME.log', 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 index f899918b0c2bf4fa267029b3508985b2028ac207..1b54d6b8b58795f6706d8ca3b59aadc2243be0f1 100644 GIT binary patch delta 839 zcmZva&2JJx7{=dOzFaI{tz8Nv?HI+-5NOmGFNPMR0S`rsCdS%ES7w4Vz_#60YXZTD zH&0})Cip)P6BGY~-n{qVSq~mOc+_{;#&!~CGw<&H=6Rl(*`41bax^9>&#zGM@#jxZ z8*tJzysu%m-;Yvn<1_FMU@HWS!2L`JaqADZ+T=rin}|0nfk{|9ULaQ|Ka$sTbJGkT zie$enGrov^>DmBb2+-Hy@Q^qfFfTYB=xHz{@;N@#puDp~`W|3Ds8k&u!}OUOeZWT0|&18ysC5Ij0zQV=yWwbUKVo$ z268{Ms@P4KQ=u~Zh11#RRhjEG6v*Px^MLX1^DUeiHN3FD2@hF9u1UlHn3TWfmRKre z4Qlh3{J?Ber`6$hK1i|IYa(4E4UB&1sW&(d%%w z+9DV!#uvB5&%*ZP-s(4UC4nT(PHfM(*~wX5+ORr%ZSHXUCXP1DCKuzx{9#pYi)dMrr2Hyj&YC855EjpnwTTI{ocuocu delta 15 WcmbQCKSQ65`7 sddPreDriverConf_patched.cmd - mv -f sddPreDriverConf_patched.cmd ${project_name}/src/main/epics/iocBoot/iocEC-GN-PCF0CORE/sddPreDriverConf.cmd + cat patches/EC-GN-P01-PCF0CORE_sddPreDriverConf.patch ${project_name}/src/main/epics/iocBoot/iocEC-GN-P01-PCF0CORE/sddPreDriverConf.cmd > sddPreDriverConf_patched.cmd + mv -f sddPreDriverConf_patched.cmd ${project_name}/src/main/epics/iocBoot/iocEC-GN-P01-PCF0CORE/sddPreDriverConf.cmd - cat patches/EC-GN-PCF0CORE_userPreDriverConf.patch ${project_name}/src/main/epics/iocBoot/iocEC-GN-PCF0CORE/userPreDriverConf.cmd > userPreDriverConf_patched.cmd - mv -f userPreDriverConf_patched.cmd ${project_name}/src/main/epics/iocBoot/iocEC-GN-PCF0CORE/userPreDriverConf.cmd + cat patches/EC-GN-P01-PCF0CORE_userPreDriverConf.patch ${project_name}/src/main/epics/iocBoot/iocEC-GN-P01-PCF0CORE/userPreDriverConf.cmd > userPreDriverConf_patched.cmd + mv -f userPreDriverConf_patched.cmd ${project_name}/src/main/epics/iocBoot/iocEC-GN-P01-PCF0CORE/userPreDriverConf.cmd + sed -i 's+# Add all the support libraries needed by this IOC+# Add all the support libraries needed by this IOC\n-include $(EPICS_ROOT)/mk/asyn.mk\n-include $(EPICS_ROOT)/mk/picmg.mk\n-include $(EPICS_ROOT)/mk/stream.mk\n-include $(EPICS_ROOT)/mk/nisync-epics.mk\n-include $(EPICS_ROOT)/mk/nisync-generalTime.mk\n-include $(EPICS_ROOT)/mk/nixseries-epics.mk\n-include $(EPICS_ROOT)/mk/pxi6259-epics.mk\n-include $(EPICS_ROOT)/mk/pxi6528-epics.mk+g' EC-GN-JA-PCF/src/main/epics/EC-GN-P01App/src/Makefile + + sed -i 's+epicsEnvSet("\(.*\)")+epicsEnvSet("\1:${TOP}/iocBoot/iocEC-GN-P01-PCF0CORE")+g' EC-GN-JA-PCF/src/main/epics/iocBoot/iocEC-GN-P01-PCF0CORE/envSystem fi cid=$((cid+1)) diff --git a/patches/EC-GN-PCF0CORE_dbToLoad.patch b/patches/EC-GN-P01-PCF0CORE_dbToLoad.patch similarity index 100% rename from patches/EC-GN-PCF0CORE_dbToLoad.patch rename to patches/EC-GN-P01-PCF0CORE_dbToLoad.patch diff --git a/patches/EC-GN-PCF0CORE_sddPreDriverConf.patch b/patches/EC-GN-P01-PCF0CORE_sddPreDriverConf.patch similarity index 98% rename from patches/EC-GN-PCF0CORE_sddPreDriverConf.patch rename to patches/EC-GN-P01-PCF0CORE_sddPreDriverConf.patch index b496ad5..d5d45a7 100644 --- a/patches/EC-GN-PCF0CORE_sddPreDriverConf.patch +++ b/patches/EC-GN-P01-PCF0CORE_sddPreDriverConf.patch @@ -60,4 +60,5 @@ pxi6528_init("ni6528_0", "/dev/pxi6528.0") # pxi6528_reset("ni6528_0") pxi6528_init("ni6528_1", "/dev/pxi6528.1") # asynSetTraceMask("ni6528_1",0,255) -# pxi6528_reset("ni6528_1") \ No newline at end of file +# pxi6528_reset("ni6528_1") + diff --git a/patches/EC-GN-PCF0CORE_userPreDriverConf.patch b/patches/EC-GN-P01-PCF0CORE_userPreDriverConf.patch similarity index 97% rename from patches/EC-GN-PCF0CORE_userPreDriverConf.patch rename to patches/EC-GN-P01-PCF0CORE_userPreDriverConf.patch index d88df88..1fe790b 100644 --- a/patches/EC-GN-PCF0CORE_userPreDriverConf.patch +++ b/patches/EC-GN-P01-PCF0CORE_userPreDriverConf.patch @@ -61,4 +61,5 @@ drvAsynIPPortConfigure("FHPS2", "192.168.5.7:6000") drvAsynIPPortConfigure("MC2", "192.168.5.8:6000") -drvAsynIPPortConfigure("GC2", "192.168.5.9:6000") \ No newline at end of file +drvAsynIPPortConfigure("GC2", "192.168.5.9:6000") +